prepare("SELECT subject_id FROM subjectss WHERE subjectname = :subj"); $getsid->bindParam(":subj", $subject); $getsid->execute(); $gw = $getsid->fetch(PDO::FETCH_ASSOC); $subjid = $gw['subject_id'] ?? 0; // Prepare response $response = ['success' => false, 'message' => '', 'scores' => []]; if ($subjid) { // Get existing scores for all students in the class $scoresQuery = $DBcon->prepare(" SELECT m.regno, m.test, m.exam FROM marks m WHERE m.acyear = :acyear AND m.term = :term AND m.klass = :classid AND m.subject_id = :subjid "); $scoresQuery->bindParam(":acyear", $acyear); $scoresQuery->bindParam(":term", $term); $scoresQuery->bindParam(":classid", $classid); $scoresQuery->bindParam(":subjid", $subjid); $scoresQuery->execute(); $scores = []; while ($scoreRow = $scoresQuery->fetch(PDO::FETCH_ASSOC)) { $scores[$scoreRow['regno']] = [ 'test' => $scoreRow['test'], 'exam' => $scoreRow['exam'] ]; } // Get students list to match order $gts = $DBcon->prepare("SELECT * FROM promoted WHERE class_id = :a AND accademic_year = :b"); $gts->bindParam(":a", $classid); $gts->bindParam(":b", $acyear); $gts->execute(); $regnoarray = []; while($row = $gts->fetch(PDO::FETCH_ASSOC)) { $regnoarray[] = $row['regno']; } // Match scores with student order $orderedScores = []; foreach ($regnoarray as $regno) { $orderedScores[] = $scores[$regno] ?? ['test' => '', 'exam' => '']; } $response['success'] = true; $response['scores'] = $orderedScores; } else { $response['message'] = 'Subject not found'; } header('Content-Type: application/json'); echo json_encode($response); exit; } } function autolevel($stclass) { $stclass = strtoupper(trim($stclass)); // Use regex to extract the Basic level if (preg_match('/JSS\s*([1-6])/i', $stclass, $matches)) { return 'JSS ' . $matches[1]; } return null; } if(isset($_SESSION['usermail'])) { $tmail = $_SESSION['usermail']; $tsubj = $_SESSION['subj'] ?? ''; } if(!isset($_SESSION['yr'])) { header("location: resultdetails"); exit; } $message = []; $admin = $_SESSION['username'] ?? ''; $acyear = $_SESSION['yr'] ?? ''; $schterm = $_SESSION['term'] ?? ''; $classid = $_SESSION['classid'] ?? ''; $lv = autolevel($classid); $msg = ''; // Get students list $gts = $DBcon->prepare("SELECT * FROM promoted WHERE class_id = :a AND accademic_year = :b"); $gts->bindParam(":a", $classid); $gts->bindParam(":b", $acyear); $gts->execute(); $regnoarray = []; $sname = []; while($row = $gts->fetch(PDO::FETCH_ASSOC)) { $regnoarray[] = $row['regno']; $getname = $DBcon->prepare("SELECT * FROM students_info WHERE regno = :r"); $getname->bindParam(":r", $row['regno']); $getname->execute(); $rown = $getname->fetch(PDO::FETCH_ASSOC); $fulname = $rown['fullname'] ?? ''; $sname[] = $fulname; } $length = count($regnoarray); if (isset($_POST['submit']) && !isset($_POST['action'])) { $subj = trim($_POST['subject'] ?? ''); if (!empty($subj)) { $getsid = $DBcon->prepare("SELECT subject_id FROM subjectss WHERE subjectname = :subj"); $getsid->bindParam(":subj", $subj); $getsid->execute(); $gw = $getsid->fetch(PDO::FETCH_ASSOC); $subjid = $gw['subject_id'] ?? 0; $successCount = 0; for($x = 0; $x < $length; $x++) { $reg = $regnoarray[$x]; $test = $_POST['test'][$x] ?? 0; $exam = $_POST['exam'][$x] ?? 0; // Convert to integers and validate $test = is_numeric($test) ? (int)$test : 0; $exam = is_numeric($exam) ? (int)$exam : 0; // Set to 0 if empty if(empty($test)) $test = 0; if(empty($exam)) $exam = 0; // Check if record exists $check = $DBcon->prepare("SELECT * FROM marks WHERE acyear = :acyear AND subject_id = :subjid AND term = :term AND klass = :classid AND regno = :regno"); $check->bindParam(":acyear", $acyear); $check->bindParam(":subjid", $subjid); $check->bindParam(":term", $schterm); $check->bindParam(":classid", $classid); $check->bindParam(":regno", $reg); $check->execute(); if($check->rowCount() > 0) { // Update existing record $sql = $DBcon->prepare("UPDATE marks SET test = :test, exam = :exam, admin = :admin WHERE acyear = :acyear AND term = :term AND klass = :classid AND subject_id = :subjid AND regno = :regno"); $sql->bindParam(":test", $test); $sql->bindParam(":exam", $exam); $sql->bindParam(":admin", $admin); $sql->bindParam(":acyear", $acyear); $sql->bindParam(":term", $schterm); $sql->bindParam(":classid", $classid); $sql->bindParam(":subjid", $subjid); $sql->bindParam(":regno", $reg); } else { // Insert new record $sql = $DBcon->prepare("INSERT INTO marks (acyear, term, klass, subject, subject_id, regno, level, test, exam, admin) VALUES (:a, :b, :c, :d, :e, :f, :g, :h, :i, :j)"); $sql->bindParam(":a", $acyear); $sql->bindParam(":b", $schterm); $sql->bindParam(":c", $classid); $sql->bindParam(":d", $subj); $sql->bindParam(":e", $subjid); $sql->bindParam(":f", $reg); $sql->bindParam(":g", $lv); $sql->bindParam(":h", $test); $sql->bindParam(":i", $exam); $sql->bindParam(":j", $admin); } if($sql->execute()) { $successCount++; } } if($successCount > 0) { $msg = htmlspecialchars($subj) . ' ' . 'Updated successfully for ' . $successCount . ' students'; } else { $msg = 'No records were updated'; } } else { $msg = 'Please select a subject'; } } ?> School Admin - Edit Results

Edit Student Results

            ADD SUBJECT    CHANGE CLASS

SN NAMES REG NO TEST SCORE (40%) EXAM SCORE (60%)